package _interview75;

import java.util.Stack;

/**
 * 394. 字符串解码
 */
public class No394 {
    public String decodeString(String s) {
        int num = 0;
        StringBuilder sb = new StringBuilder();

        Stack<Integer> numStack = new Stack<>();
        Stack<StringBuilder> sbStack = new Stack<>();

        for (char c : s.toCharArray()) {
            if (c == '[') {
                //碰到括号，记录K和当前res，归零。
                numStack.push(num);
                sbStack.push(sb);
                num = 0;
                sb = new StringBuilder();
            } else if (c == ']') {
                //出最近的一个左括号入的k,当前res进行计算不入栈
                int curMulti = numStack.pop();
                //与括号外合并
                sb = sbStack.pop().append(String.valueOf(sb).repeat(curMulti));
            }
            // 如果k是多位数需要x10
            else if (c >= '0' && c <= '9') num = num * 10 + c - '0';
            // 如果是字母则缓慢添加
            else sb.append(c);
        }
        return sb.toString();
    }
}
